package com.reportes;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.chart.BarChart.Type;
import org.achartengine.model.SeriesSelection;
import org.achartengine.model.XYMultipleSeriesDataset;

import clasesGraficas.Consultas;
import clasesGraficas.VentasN1;
import clasesGraficas.VentasN2;
import clasesGraficas.VentasN3;

import android.app.ActionBar;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

public class Reporte_MasVendidos extends Activity {

	//### Graficar ###/
	GraphicalView mChartView = null;
	int[] anios = null;
	int[] meses = null;
	int[] ventasAnio = null;
	int[] ventasMes = null;
	String[] datos = null;
	String tituloGrafica = "";
	LinearLayout layoutGrafica = null;
	boolean anual = false;
	//################
	
	public String titulo = "";
	public int flagTiempo = 0; // 1=mes && 2=trimenstre && 3=anno
	public int flagLima = 0;
	public int flagProvincia = 0;
	public int flagNivel=0; 
	public int flagTop=0;
	public int flagBottom=0;
	
	private Button pickDateInicio;
    private int anhoInicio;
    private int mesInicio;
    private int diaInicio;
    
    private Button pickDateFin;
    private int anhoFin;
    private int mesFin;
    private int diaFin;
    
    static final int DATE_DIALOG_Inicial = 0;
    static final int DATE_DIALOG_Final = 1;
    
    private TextView mDateDisplayInicio,mDateDisplayFin;
	
	/**
	 * @see android.app.Activity#onCreate(Bundle)
	 */
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		
		super.onCreate(savedInstanceState);
		setContentView(R.layout.mas_vendidos);
		
		Resources res = getResources();
		Drawable myImage = res.getDrawable(R.drawable.background2);
		ActionBar actionBar = this.getActionBar();
		actionBar.setBackgroundDrawable(myImage);
		actionBar.setDisplayUseLogoEnabled(true);
		actionBar.setDisplayShowTitleEnabled(false);
		
		
		mDateDisplayInicio = (TextView) findViewById(R.id.textView2);
		mDateDisplayFin = (TextView) findViewById(R.id.textView3);
		
		pickDateInicio = (Button) findViewById(R.id.btnInicio);

		pickDateInicio.setOnClickListener(new View.OnClickListener() {
		            public void onClick(View v) {
		                showDialog(DATE_DIALOG_Inicial);
		            }
		        });
		        
		final Calendar c = Calendar.getInstance();
		anhoInicio = c.get(Calendar.YEAR);
		mesInicio = c.get(Calendar.MONTH);
		diaInicio = c.get(Calendar.DAY_OF_MONTH);
		
		pickDateFin = (Button) findViewById(R.id.btnFin);

		pickDateFin.setOnClickListener(new View.OnClickListener() {
		            public void onClick(View v) {
		                showDialog(DATE_DIALOG_Final);
		            }
		        });
		        
		anhoFin = c.get(Calendar.YEAR);
		mesFin = c.get(Calendar.MONTH);
		diaFin = c.get(Calendar.DAY_OF_MONTH);
	}
	
	
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
	    // Handle item selection
	    switch (item.getItemId()) {
	        case R.id.logout:
	        	Intent logo = new Intent(this,login.class);
	        	startActivity(logo);
	            return true;
	        case R.id.ventas:
	        	Intent ventas = new Intent(this,login.class);
	        	startActivity(ventas);
	            return true;
	        case R.id.consultas:
	        	Intent consultas = new Intent(this,login.class);
	        	startActivity(consultas);
	            return true;
	        case R.id.cancelaciones:
	        	Intent cancelaciones = new Intent(this,Reporte_Cancelaciones.class);
	        	startActivity(cancelaciones);
	            return true;
	        case R.id.evolutivo:
	        	Intent evolutivo = new Intent(this,csmmm.class);
	        	startActivity(evolutivo);
	            return true;
	        default:
	            return super.onOptionsItemSelected(item);
	    }
	}
	
	
	protected Dialog onCreateDialog(int id) {
		   switch (id) {
		   case DATE_DIALOG_Inicial:
		    DatePickerDialog dialogoInicio =new DatePickerDialog(this,
		                    mDateSetListenerInicio, anhoInicio, mesInicio, diaInicio);
		    
		    dialogoInicio.getDatePicker();
			   
		    return dialogoInicio;
		    
		   case DATE_DIALOG_Final:
			    DatePickerDialog dialogoFin =new DatePickerDialog(this,
			                    mDateSetListenerFin, anhoFin, mesFin, diaFin);
			    
			    dialogoFin.getDatePicker();
		   
		    return dialogoFin;
		   }
		   return null;
	}
	
	private DatePickerDialog.OnDateSetListener mDateSetListenerInicio = new DatePickerDialog.OnDateSetListener() {
        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        	anhoInicio = year;
        	mesInicio = monthOfYear;
        	diaInicio = dayOfMonth;
        	
        	mDateDisplayInicio.setText(new StringBuilder()
			// Month is 0 based so add 1
            .append(mesInicio + 1).append("-")
            .append(diaInicio).append("-")
            .append(anhoInicio).append(" "));
        }
	};
	
	private DatePickerDialog.OnDateSetListener mDateSetListenerFin = new DatePickerDialog.OnDateSetListener() {
        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        	anhoFin = year;
        	mesFin = monthOfYear;
        	diaFin = dayOfMonth;
        	
        	mDateDisplayFin.setText(new StringBuilder()
			// Month is 0 based so add 1
            .append(mesFin + 1).append("-")
            .append(diaFin).append("-")
            .append(anhoFin).append(" "));        	
        }
	};
	
	
	public void GenerarReporte(View view){			
		
		int numeroInicial = anhoInicio*10000+mesInicio*100+diaInicio;
		int numeroFinal = anhoFin*10000+mesFin*100+diaFin;
		
		if ( ( flagProvincia == 0 && flagLima==0)== false) {
		
			if(numeroFinal>=numeroInicial){
				
				//int mesinicialnumero = (mesInicio) % 4 ;
				//int mesfinalnumero = (mesFin) % 4 ;
				//Toast.makeText(this, mesinicialnumero+"", Toast.LENGTH_LONG).show();
				//Toast.makeText(this, mesfinalnumero+"", Toast.LENGTH_LONG).show();
				
				//if((mesinicialnumero!=0 || mesfinalnumero!=0) && flagTiempo==2){
					
					//Toast.makeText(this, "Los meses no coinciden para el trimenstre", Toast.LENGTH_LONG).show();
					
				//}else{
					
					/*public int flagTiempo = 0            1=mes && 2=trimenstre && 3=anho
					 * 
					 * 
					 * En este bloque se encuentran las llamadas
					 * 
					 * 
					 * (En este punto ya paso con todas las validaciones es decir esta totalmente habilitado)
					 * 
					*/
					
					
					
						//Aqui va la llamada a la funcion linea normal y refrescar el layout
						//Datos: Esto esta harcodeado por ahora
						this.anios = new int[] {2008, 2009, 2010, 2011};
						this.meses = new int[] {3,4,5,6};
						this.ventasMes = new int[] {5000, 6000, 6000, 10000};
						this.ventasAnio = new int[] {20000, 40000, 30000, 35000};
						this.datos = new String [] {"Datos 1", "Datos 2", "Datos 3", "Datos 4"};
						
						//Toast.makeText(this, "Se inicia la generación del reporte", Toast.LENGTH_LONG).show();
						
						this.tituloGrafica = "Ventas de la empresa 2008-2011";
						Consultas ventasGenerales = new Consultas();
						
						if (this.anual){							
							ventasGenerales.ejecutar(anios, ventasAnio, tituloGrafica, 1);
						}
						else{
							this.tituloGrafica = "Ventas de la empresa Marzo-Junio 2011";
							ventasGenerales.ejecutar(meses, ventasMes, tituloGrafica, 2);
						}
											
						this.layoutGrafica = (LinearLayout)findViewById(R.id.idpanelgraficoconsulta);
						this.mChartView = ChartFactory.getBarChartView(this,ventasGenerales.getDataset(), 
								ventasGenerales.getmRenderer(),Type.DEFAULT);
						layoutGrafica.removeAllViews();
					    layoutGrafica.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT,
						               LayoutParams.FILL_PARENT));
						
						Toast.makeText(this, "Se genera el reporte normal", Toast.LENGTH_LONG).show();
						//****
						mChartView.setOnClickListener(new View.OnClickListener() {
					        @Override
					        public void onClick(View v) {
					          SeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint();
					          double[] xy = mChartView.toRealPoint(0);
					          if (seriesSelection == null) {} 
					          else {					        	  
					        	  if (anual)
					        		  Toast.makeText(
					        				  Reporte_MasVendidos.this,
					        			  		"Los datos del punto es: " + getDataXY(datos, anios, ventasAnio, (int)seriesSelection.getXValue(), 
					        			  				(int)seriesSelection.getValue()), Toast.LENGTH_SHORT).show();
					        	  else
					        		  Toast.makeText(
						        			  Reporte_MasVendidos.this,
						        			  	"Los datos del punto es: " + getDataXY(datos, anios, ventasMes, (int)seriesSelection.getXValue(), 
						        			  			(int)seriesSelection.getValue()), Toast.LENGTH_SHORT).show();
					          }
					        }
					      });	
			}
			
			else{
				
				Toast.makeText(this, "La Fecha Final no puede ser menor a la Fecha Inicial", Toast.LENGTH_LONG).show();
			}
		}	
		else{
			
			Toast.makeText(this, "Debe seleccionar el periodo y la ubicacion", Toast.LENGTH_LONG).show();
		}
		
	}
	

	public void establecerColorLargoMuestra(View view){		
		
		Button button03 = (Button) findViewById(R.id.btn03);
		Button button05 = (Button) findViewById(R.id.btn05);
		Button button10 = (Button) findViewById(R.id.btn10);
	
		if (button03.isPressed()){
			
			anual = false;
			Drawable d1 = button03.getBackground();
            PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
            d1.setColorFilter(filter);
						
			Drawable d2 = button05.getBackground();
            findViewById(R.id.btn05).invalidateDrawable(d2);
            d2.clearColorFilter();
			
            Drawable d3 = button10.getBackground();
            findViewById(R.id.btn10).invalidateDrawable(d3);
            d3.clearColorFilter();
            
			flagTiempo=1;
		}
		
		if (button05.isPressed()){			
			anual = true;
			Drawable d1 = button05.getBackground();
            PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
            d1.setColorFilter(filter);
			
			Drawable d2 = button03.getBackground();
            findViewById(R.id.btn03).invalidateDrawable(d2);
            d2.clearColorFilter();
			
            Drawable d3 = button10.getBackground();
            findViewById(R.id.btn10).invalidateDrawable(d3);
            d3.clearColorFilter();
            
			flagTiempo=3;
		
		}
		if (button10.isPressed()) {
			
			anual = false;
			Drawable d1 = button10.getBackground();
            PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
            d1.setColorFilter(filter);

			
			Drawable d2 = button03.getBackground();
            findViewById(R.id.btn03).invalidateDrawable(d2);
            d2.clearColorFilter();
			
            Drawable d3 = button05.getBackground();
            findViewById(R.id.btn05).invalidateDrawable(d3);
            d3.clearColorFilter();
            
			flagTiempo=2;			
		}
	}

	
	
	public void establecerColorUbicacion(View view){	

		Button buttonLima = (Button) findViewById(R.id.btnLima);
		Button buttonProvincia = (Button) findViewById(R.id.btnProvincia);

        
        if (buttonLima.isPressed()){
        	if (flagLima == 0)  
        		flagLima=1; 
        	else 
        		flagLima=0;
		}
		if (buttonProvincia.isPressed()){			
			if(flagProvincia==0) 
				flagProvincia=1; 
			else 
				flagProvincia=0;
		}
		
		setColorUbicacion();
	}
	
	
	public void setColorUbicacion(){
		
		Button buttonLima = (Button) findViewById(R.id.btnLima);
		Button buttonProvincia = (Button) findViewById(R.id.btnProvincia);
				
        if (flagLima == 1) {        		
        	Drawable d1 = buttonLima.getBackground();
            PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
            d1.setColorFilter(filter);
    	}
    	else{
    		Drawable d2 = buttonLima.getBackground();
            findViewById(R.id.btnLima).invalidateDrawable(d2);
            d2.clearColorFilter();
    	}

		if(flagProvincia==1){			
			Drawable d1 = buttonProvincia.getBackground();
            PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
            d1.setColorFilter(filter);			
		}
		else{            
			Drawable d2 = buttonProvincia.getBackground();
            findViewById(R.id.btnProvincia).invalidateDrawable(d2);
            d2.clearColorFilter();           
		}
	}

	
//Dividir en Top y otro para Bottom
	public void establecerColorRanking(View view){	

		Button buttonTop = (Button) findViewById(R.id.btnTop);
		Button buttonBottom = (Button) findViewById(R.id.btnBottom);
        
        
        	if (flagTop == 0) {
        		Drawable d1 = buttonTop.getBackground();
                PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
                d1.setColorFilter(filter);
    			flagTop=1;
        	}
        	else{
        		Drawable d2 = buttonBottom.getBackground();
                findViewById(R.id.btnTop).invalidateDrawable(d2);
                d2.clearColorFilter();
                flagTop=0;
        	}
		
        
					
			if(flagBottom==0){
				Drawable d1 = buttonBottom.getBackground();
	            PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
	            d1.setColorFilter(filter);
				flagBottom=1;
			}
			else{
				Drawable d2 = buttonTop.getBackground();
	            findViewById(R.id.btnBottom).invalidateDrawable(d2);
	            d2.clearColorFilter();
	            flagBottom=0;
			}
		
	}

	
	
//	public void anHandler(View view){
//		Venta_General venta = new Venta_General();
//
//		venta.obtenerAnuales(2010,2012);
//
//		//venta.obtenerAnuales();
//
//		GraphicalView mChartview;
//		LinearLayout layout = (LinearLayout) findViewById(R.id.idpanelgraficoconsulta);
//		mChartview = ChartFactory.getLineChartView(this, venta.getDataset(), venta.getRenders() );
//		layout.removeAllViews();
//		layout.addView(mChartview, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
//	}
//	
//	public void mesHandler(View view){
//		Venta_General venta = new Venta_General();
//		venta.obtenerMensuales();
//		GraphicalView mChartview;
//		LinearLayout layout = (LinearLayout) findViewById(R.id.idpanelgraficoconsulta);
//		mChartview = ChartFactory.getLineChartView(this, venta.getDataset(), venta.getRenders() );
//		layout.removeAllViews();
//		layout.addView(mChartview, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
//	}
//	
//	public void trimHandler(View view){
//		Venta_General venta = new Venta_General();
//		venta.obtenerTrimestrales();
//		GraphicalView mChartview;
//		LinearLayout layout = (LinearLayout) findViewById(R.id.idpanelgraficoconsulta);
//		mChartview = ChartFactory.getLineChartView(this, venta.getDataset(), venta.getRenders() );
//		layout.removeAllViews();
//		layout.addView(mChartview, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
//	}
	
	public String getDataXY(String[] data, int[] xValues, int[] yValues, int x, int y){
    	int indice = 0;
    	
    	for(int i=0;i<xValues.length;i++){
    		indice= i;
    		if (xValues[i] == x && yValues[i] == y)
    			break;
    	}
    	
    	return data[indice];
    }
	
		
}
